package br.com.edumobi.fragments;

import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;

import br.com.edumobi.R;

public class EsqueciASenhaFragment extends GenericoFragment {

    private TextView textViewNomeTelaEsqueciASenha;
    private TextView textViewOrientacaoEsqueciASenha;
    private EditText editTextEmailEsqueciASenha;
    private Button buttonGerarNovaSenhaEsqueciASenha;
    private ProgressBar progressBarEsqueciASenha;

    private AcoesEsqueciASenhaFragment activity;
    private EsqueciASenhaTask task;

    private String email;

    View.OnClickListener clickButtonGerarNovaSenhaEsqueciASenha = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            email = editTextEmailEsqueciASenha.getText().toString();

            if (email.isEmpty()) {
                activity.onSpeakAndMakeText(R.string.obrigatoriedade_email);
            } else {
                if (activity.isConnected()) {
                    task = new EsqueciASenhaTask();
                    task.execute();
                } else {
                    activity.onSpeakAndMakeText(R.string.excecao_sem_conexao_internet);
                }
            }
        }
    };

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        activity = (AcoesEsqueciASenhaFragment) getActivity();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_esqueci_a_senha, container, false);

        textViewNomeTelaEsqueciASenha = (TextView) view.findViewById(R.id.textViewNomeTelaEsqueciASenha);
        textViewOrientacaoEsqueciASenha = (TextView) view.findViewById(R.id.textViewOrientacaoEsqueciASenha);
        editTextEmailEsqueciASenha = (EditText) view.findViewById(R.id.editTextEmailEsqueciASenha);
        buttonGerarNovaSenhaEsqueciASenha = (Button) view.findViewById(R.id.buttonGerarNovaSenhaEsqueciASenha);
        progressBarEsqueciASenha = (ProgressBar) view.findViewById(R.id.progressBarEsqueciASenha);

        buttonGerarNovaSenhaEsqueciASenha.setOnClickListener(clickButtonGerarNovaSenhaEsqueciASenha);

        if (task != null && task.getStatus().equals(AsyncTask.Status.RUNNING)) {
            hideComponents();
            progressBarEsqueciASenha.setVisibility(View.VISIBLE);
        }

        return view;
    }

    @Override
    public void showComponents() {
        textViewNomeTelaEsqueciASenha.setVisibility(View.VISIBLE);
        textViewOrientacaoEsqueciASenha.setVisibility(View.VISIBLE);
        editTextEmailEsqueciASenha.setVisibility(View.VISIBLE);
        buttonGerarNovaSenhaEsqueciASenha.setVisibility(View.VISIBLE);
        progressBarEsqueciASenha.setVisibility(View.VISIBLE);
    }

    @Override
    public void hideComponents() {
        textViewNomeTelaEsqueciASenha.setVisibility(View.GONE);
        textViewOrientacaoEsqueciASenha.setVisibility(View.GONE);
        editTextEmailEsqueciASenha.setVisibility(View.GONE);
        buttonGerarNovaSenhaEsqueciASenha.setVisibility(View.GONE);
        progressBarEsqueciASenha.setVisibility(View.GONE);
    }

    private class EsqueciASenhaTask extends AsyncTask<Void, Void, Boolean> {

        @Override
        protected void onPreExecute() {
            hideComponents();
            progressBarEsqueciASenha.setVisibility(View.VISIBLE);
            activity.onSpeak(R.string.aguarde);
        }

        @Override
        protected Boolean doInBackground(Void... params) {
            return activity.onRegerarSenha(email);
        }

        @Override
        protected void onPostExecute(Boolean aBoolean) {
            showComponents();
            progressBarEsqueciASenha.setVisibility(View.GONE);

            if (aBoolean) {
                activity.onMakeText(R.string.senha_regerada_com_sucesso);
                activity.onFinish();
            } else {
                activity.onSpeakAndMakeText(R.string.excecao_regerar_senha_aluno_malsucedido);
            }
        }
    }

    public interface AcoesEsqueciASenhaFragment extends AcoesGenericoFragment {
        Boolean onRegerarSenha(String email);
    }
}